// var $playerDataManager = require("./PlayerDataManager");
// var $excel = require("./Excel");
// var $const_Game = require("./Const_Game");
// var r = (function () {
//     function e() {}
//     Object.defineProperty(e, "shuiGuoLevelMap", {
//         get: function () {
//             var e = this;
//             if (!this._shuiGuoLevelMap) {
//                 this._shuiGuoLevelMap = new Map();
//                 $excel.Excel.shuiguolevel_all.forEach(function (t) {
//                     if (!e._shuiGuoLevelMap.has(t.shuiguoId)) {
//                         e._shuiGuoLevelMap.set(t.shuiguoId, []);
//                     }
//                     e._shuiGuoLevelMap.get(t.shuiguoId).push(t);
//                 });
//             }
//             return this._shuiGuoLevelMap;
//         },
//         enumerable: !1,
//         configurable: !0
//     });
//     Object.defineProperty(e, "shuiGuoCiTiaoMap", {
//         get: function () {
//             var e = this;
//             if (!this._shuiGuoCiTiaoMap) {
//                 this._shuiGuoCiTiaoMap = new Map();
//                 $excel.Excel.shuiguocitiao_all.forEach(function (t) {
//                     if (!e._shuiGuoCiTiaoMap.has(t.shuiguoId)) {
//                         e._shuiGuoCiTiaoMap.set(t.shuiguoId, []);
//                     }
//                     e._shuiGuoCiTiaoMap.get(t.shuiguoId).push(t);
//                 });
//             }
//             return this._shuiGuoCiTiaoMap;
//         },
//         enumerable: !1,
//         configurable: !0
//     });
//     e.GetUnLockCiTiao = function (e) {
//         return (
//             1 == e.citiaochuxian ||
//             0 == e.shuiguoId ||
//             (console.log("水果id", e.shuiguoId),
//             $playerDataManager.PlayerDataMgr.GetEquipDataById(e.shuiguoId).level >= e.jiesuo)
//         );
//     };
//     e.GetShuiGuoCurrLevelData = function (e) {
//         var t = $excel.Excel.shuiguo(e);
//         var o = this.shuiGuoLevelMap.get(e);
//         var r = $playerDataManager.PlayerDataMgr.GetEquipDataById(e);
//         var c = {
//             atk: t.attack,
//             atkSpeed: t.attackspeed,
//             talent: [],
//             buffIsBaiFenBi: !1
//         };
//         var s = {
//             atk: t.attack,
//             atkSpeed: t.attackspeed,
//             talent: [],
//             buffIsBaiFenBi: !1
//         };
//         var l = $excel.Excel.shuiguobuff(t.talent);
//         if (l) {
//             for (var u = 0; u < l.value.length; u++) {
//                 var d = l.value[u];
//                 c.talent.push(d);
//                 s.talent.push(d);
//             }
//             switch (e) {
//                 case $const_Game.FruitId.爆头瓜:
//                 case $const_Game.FruitId.榴莲王:
//                 case $const_Game.FruitId.香蕉射手:
//                 case $const_Game.FruitId.黄瓜大棒:
//                 case $const_Game.FruitId.辣妹子:
//                 case $const_Game.FruitId.冻斯梨:
//                 case $const_Game.FruitId.毒蘑菇:
//                 case $const_Game.FruitId.天山雪莲:
//                 case $const_Game.FruitId.元婴果:
//                     c.buffIsBaiFenBi = !0;
//                     c.buffIsBaiFenBi = !0;
//             }
//         }
//         if (o) {
//             for (u = 0; u < o.length; u++) {
//                 d = o[u];
//                 if (u < r.level - 1 && ((c.atk += d.addattack), (c.atkSpeed += d.addAtkSpeed), l)) {
//                     for (var p = 0; p < d.addbeidongbuff.length; p++) {
//                         var h = d.addbeidongbuff[p] || 0;
//                         c.talent[p] += h;
//                     }
//                 }
//                 if (u <= r.level - 1 && ((s.atk += d.addattack), (s.atkSpeed += d.addAtkSpeed), l)) {
//                     for (var f = 0; f < d.addbeidongbuff.length; f++) {
//                         h = d.addbeidongbuff[f] || 0;
//                         s.talent[f] += h;
//                     }
//                 }
//             }
//         }
//         return [c, s];
//     };
//     e.GetSuiPian = function (e) {
//         if (void 0 === e) {
//             e = [1, 0, 0];
//         }
//         var t = [[], [], []];
//         $excel.Excel.shuiguo_all.forEach(function (e) {
//             if ($playerDataManager.PlayerDataMgr.GetEquipDataById(e.id).isUnLock && -1 != e.isShow) {
//                 t[e.quality - 1].push(e);
//             }
//         });
//         var o = new Map();
//         for (var a = 0; a < e.length; a++) {
//             var r = e[a];
//             if (0 != t[a].length) {
//                 for (var c = 0; c < r; c++) {
//                     var s = Math.floor(Math.random() * t[a].length);
//                     var l = t[a][s];
//                     if (!o.has(l.id)) {
//                         o.set(l.id, 0);
//                     }
//                     var u = o.get(l.id);
//                     u++;
//                     o.set(l.id, u);
//                 }
//             }
//         }
//         return o;
//     };
//     e.goldId = 999999;
//     e.diamondId = 999998;
//     e.powerId = 999997;
//     e.selfMap = {};
//     e.isNeedResetWareHouse = !1;
//     return e;
// })();
// exports.default = r;

// import { FruitId } from "./Const_Game";
// import { Excel } from './Excel';
// import { PlayerDataMgr } from "./PlayerDataManager";

// /**
//  * 水果数据管理类
//  * 建议类名: FruitDataManager
//  */
// class HallGlobalVariable {
//     private static _shuiGuoLevelMap: Map<number, any[]> | null = null;
//     private static _shuiGuoCiTiaoMap: Map<number, any[]> | null = null;

//     /**
//      * 获取水果等级映射表
//      * 建议方法名: getShuiGuoLevelMap
//      */
//     public static get shuiGuoLevelMap(): Map<number, any[]> {
//         if (!this._shuiGuoLevelMap) {
//             this._shuiGuoLevelMap = new Map();
//             Excel.shuiguolevel_all.forEach((levelData: any) => {
//                 if (!this._shuiGuoLevelMap!.has(levelData.shuiguoId)) {
//                     this._shuiGuoLevelMap!.set(levelData.shuiguoId, []);
//                 }
//                 this._shuiGuoLevelMap!.get(levelData.shuiguoId)!.push(levelData);
//             });
//         }
//         return this._shuiGuoLevelMap;
//     }

//     /**
//      * 获取水果词条映射表
//      * 建议方法名: getShuiGuoCiTiaoMap
//      */
//     public static get shuiGuoCiTiaoMap(): Map<number, any[]> {
//         if (!this._shuiGuoCiTiaoMap) {
//             this._shuiGuoCiTiaoMap = new Map();
//             Excel.shuiguocitiao_all.forEach((ciTiaoData: any) => {
//                 if (!this._shuiGuoCiTiaoMap!.has(ciTiaoData.shuiguoId)) {
//                     this._shuiGuoCiTiaoMap!.set(ciTiaoData.shuiguoId, []);
//                 }
//                 this._shuiGuoCiTiaoMap!.get(ciTiaoData.shuiguoId)!.push(ciTiaoData);
//             });
//         }
//         return this._shuiGuoCiTiaoMap;
//     }

//     /**
//      * 获取解锁词条
//      * @param ciTiaoData 词条数据
//      * @returns 是否解锁
//      * 建议方法名: getUnLockCiTiao
//      */
//     public static GetUnLockCiTiao(ciTiaoData: any): boolean {
//         return (
//             ciTiaoData.citiaochuxian === 1 ||
//             ciTiaoData.shuiguoId === 0 ||
//             (console.log("水果id", ciTiaoData.shuiguoId),
//                 PlayerDataMgr.GetEquipDataById(ciTiaoData.shuiguoId).level >= ciTiaoData.jiesuo)
//         );
//     }

//     /**
//      * 获取水果当前等级数据
//      * @param shuiguoId 水果ID
//      * @returns 当前等级数据
//      * 建议方法名: getShuiGuoCurrLevelData
//      */
//     public static GetShuiGuoCurrLevelData(shuiguoId: number): any[] {
//         const baseData = Excel.shuiguo(shuiguoId);
//         const levelDataList = this.shuiGuoLevelMap.get(shuiguoId);
//         const equipData = PlayerDataMgr.GetEquipDataById(shuiguoId);

//         const currentData = {
//             atk: baseData.attack,
//             atkSpeed: baseData.attackspeed,
//             talent: [],
//             buffIsBaiFenBi: false
//         };

//         const totalData = {
//             atk: baseData.attack,
//             atkSpeed: baseData.attackspeed,
//             talent: [],
//             buffIsBaiFenBi: false
//         };

//         const talentData = Excel.shuiguobuff(baseData.talent);
//         if (talentData) {
//             for (let i = 0; i < talentData.value.length; i++) {
//                 const talentValue = talentData.value[i];
//                 currentData.talent.push(talentValue);
//                 totalData.talent.push(talentValue);
//             }

//             switch (shuiguoId) {
//                 case FruitId.爆头瓜:
//                 case FruitId.榴莲王:
//                 case FruitId.香蕉射手:
//                 case FruitId.黄瓜大棒:
//                 case FruitId.辣妹子:
//                 case FruitId.冻斯梨:
//                 case FruitId.毒蘑菇:
//                 case FruitId.天山雪莲:
//                 case FruitId.元婴果:
//                     currentData.buffIsBaiFenBi = true;
//                     totalData.buffIsBaiFenBi = true;
//             }
//         }

//         if (levelDataList) {
//             for (let i = 0; i < levelDataList.length; i++) {
//                 const levelData = levelDataList[i];
//                 if (i < equipData.level - 1) {
//                     currentData.atk += levelData.addattack;
//                     currentData.atkSpeed += levelData.addAtkSpeed;
//                     if (talentData) {
//                         for (let j = 0; j < levelData.addbeidongbuff.length; j++) {
//                             const buffValue = levelData.addbeidongbuff[j] || 0;
//                             currentData.talent[j] += buffValue;
//                         }
//                     }
//                 }
//                 if (i <= equipData.level - 1) {
//                     totalData.atk += levelData.addattack;
//                     totalData.atkSpeed += levelData.addAtkSpeed;
//                     if (talentData) {
//                         for (let j = 0; j < levelData.addbeidongbuff.length; j++) {
//                             const buffValue = levelData.addbeidongbuff[j] || 0;
//                             totalData.talent[j] += buffValue;
//                         }
//                     }
//                 }
//             }
//         }

//         return [currentData, totalData];
//     }

//     /**
//      * 获取碎片
//      * @param qualityList 碎片品质列表
//      * @returns 碎片映射表
//      * 建议方法名: getSuiPian
//      */
//     public static GetSuiPian(qualityList: number[] = [1, 0, 0]): Map<number, number> {
//         const fragmentMap = new Map < number, number> ();
//         const qualityDataList = [[], [], []];

//         Excel.shuiguo_all.forEach((fruitData: any) => {
//             if (PlayerDataMgr.GetEquipDataById(fruitData.id).isUnLock && fruitData.isShow !== -1) {
//                 qualityDataList[fruitData.quality - 1].push(fruitData);
//             }
//         });

//         for (let i = 0; i < qualityList.length; i++) {
//             const qualityCount = qualityList[i];
//             if (qualityDataList[i].length > 0) {
//                 for (let j = 0; j < qualityCount; j++) {
//                     const randomIndex = Math.floor(Math.random() * qualityDataList[i].length);
//                     const selectedFruit = qualityDataList[i][randomIndex];
//                     if (!fragmentMap.has(selectedFruit.id)) {
//                         fragmentMap.set(selectedFruit.id, 0);
//                     }
//                     fragmentMap.set(selectedFruit.id, fragmentMap.get(selectedFruit.id)! + 1);
//                 }
//             }
//         }

//         return fragmentMap;
//     }

//     public static goldId = 999999;
//     public static diamondId = 999998;
//     public static powerId = 999997;
//     public static selfMap: { [key: string]: any } = {};
//     public static isNeedResetWareHouse = false;
// }

// export default HallGlobalVariable;

import { FruitId } from "./Const_Game";
import { Excel } from './Excel';
import { PlayerDataMgr } from "./PlayerDataManager";

/**
 * 水果数据管理类
 * 建议类名: FruitDataManager
 */
class FruitDataManager {
    private static _shuiGuoLevelMap: Map<number, any[]> | null = null;
    private static _shuiGuoCiTiaoMap: Map<number, any[]> | null = null;

    /**
     * 获取水果等级映射表
     * 建议方法名: getShuiGuoLevelMap
     */
    public static get getShuiGuoLevelMap(): Map<number, any[]> {
        if (!this._shuiGuoLevelMap) {
            this._shuiGuoLevelMap = new Map();
            Excel.shuiguolevel_all.forEach((levelData: any) => {
                if (!this._shuiGuoLevelMap!.has(levelData.shuiguoId)) {
                    this._shuiGuoLevelMap!.set(levelData.shuiguoId, []);
                }
                this._shuiGuoLevelMap!.get(levelData.shuiguoId)!.push(levelData);
            });
        }
        return this._shuiGuoLevelMap;
    }

    /**
     * 获取水果词条映射表
     * 建议方法名: getShuiGuoCiTiaoMap
     */
    public static get getShuiGuoCiTiaoMap(): Map<number, any[]> {
        if (!this._shuiGuoCiTiaoMap) {
            this._shuiGuoCiTiaoMap = new Map();
            Excel.shuiguocitiao_all.forEach((ciTiaoData: any) => {
                if (!this._shuiGuoCiTiaoMap!.has(ciTiaoData.shuiguoId)) {
                    this._shuiGuoCiTiaoMap!.set(ciTiaoData.shuiguoId, []);
                }
                this._shuiGuoCiTiaoMap!.get(ciTiaoData.shuiguoId)!.push(ciTiaoData);
            });
        }
        return this._shuiGuoCiTiaoMap;
    }

    /**
     * 获取解锁词条
     * @param ciTiaoData 词条数据
     * @returns 是否解锁
     * 建议方法名: getUnLockCiTiao
     */
    public static getUnLockCiTiao(ciTiaoData: any): boolean {
        return (
            ciTiaoData.citiaochuxian === 1 ||
            ciTiaoData.shuiguoId === 0 ||
            (console.log("水果id", ciTiaoData.shuiguoId),
                PlayerDataMgr.getEquipDataById(ciTiaoData.shuiguoId).level >= ciTiaoData.jiesuo)
        );
    }

    /**
     * 获取水果当前等级数据
     * @param shuiguoId 水果ID
     * @returns 当前等级数据
     * 建议方法名: getShuiGuoCurrLevelData
     */
    public static getShuiGuoCurrLevelData(fruitId: number): any[] {
        const baseData = Excel.shuiguo(fruitId);
        const levelDataList = this.getShuiGuoLevelMap.get(fruitId);
        const equipData = PlayerDataMgr.getEquipDataById(fruitId);

        const currData = {
            atk: baseData.attack,
            atkSpeed: baseData.attackspeed,
            talent: [],
            buffIsPercentage: false
        };

        const totalData = {
            atk: baseData.attack,
            atkSpeed: baseData.attackspeed,
            talent: [],
            buffIsPercentage: false
        };

        const talentData = Excel.shuiguobuff(baseData.talent);
        if (talentData) {
            talentData.value.forEach((talentValue: number, index: number) => {
                currData.talent.push(talentValue);
                totalData.talent.push(talentValue);
            });

            if ([FruitId.爆头瓜, FruitId.榴莲王, FruitId.香蕉射手, 
                FruitId.黄瓜大棒, FruitId.辣妹子, FruitId.冻斯梨, 
                FruitId.毒蘑菇, FruitId.天山雪莲, FruitId.元婴果].includes(fruitId)) {
                currData.buffIsPercentage = true;
                totalData.buffIsPercentage = true;
            }
        }

        if (levelDataList) {
            levelDataList.forEach((levelData: any, index: number) => {
                if (index < equipData.level - 1) {
                    currData.atk += levelData.addattack;
                    currData.atkSpeed += levelData.addAtkSpeed;
                    if (talentData) {
                        levelData.addbeidongbuff.forEach((buffValue: number, buffIndex: number) => {
                            currData.talent[buffIndex] += buffValue || 0;
                        });
                    }
                }
                if (index <= equipData.level - 1) {
                    totalData.atk += levelData.addattack;
                    totalData.atkSpeed += levelData.addAtkSpeed;
                    if (talentData) {
                        levelData.addbeidongbuff.forEach((buffValue: number, buffIndex: number) => {
                            totalData.talent[buffIndex] += buffValue || 0;
                        });
                    }
                }
            });
        }

        return [currData, totalData];
    }

    /**
     * 获取碎片
     * @param qualityList 碎片品质列表
     * @returns 碎片映射表
     * 建议方法名: getSuiPian
     */
    public static getSuiPian(qualityList: number[] = [1, 0, 0]): Map<number, number> {
        const fragmentMap = new Map<number, number>();
        const qualityDataList = [[], [], []];

        Excel.shuiguo_all.forEach((fruitData: any) => {
            if (PlayerDataMgr.getEquipDataById(fruitData.id).isUnLock && fruitData.isShow !== -1) {
                qualityDataList[fruitData.quality - 1].push(fruitData);
            }
        });

        qualityList.forEach((qualityCount: number, i: number) => {
            if (qualityDataList[i].length > 0) {
                for (let j = 0; j < qualityCount; j++) {
                    const randomIndex = Math.floor(Math.random() * qualityDataList[i].length);
                    const selectedFruit = qualityDataList[i][randomIndex];
                    fragmentMap.set(selectedFruit.id, (fragmentMap.get(selectedFruit.id) || 0) + 1);
                }
            }
        });

        return fragmentMap;
    }

    public static goldId = 999999;
    public static diamondId = 999998;
    public static powerId = 999997;
    public static selfMap: { [key: string]: any } = {};
    public static isNeedResetWareHouse = false;
}

export default FruitDataManager;